package main

import (
	"errors"
	"fmt"
)

func handlerError() {
	panic(errors.New("出错了"))
	//recover 代表恢复的意思
	if r := recover(); r != nil {
		fmt.Printf("%v\n", r)
	}
}

func catchError() {
	//defer 延迟的意思。功能为将其后的指令加入延迟队列
	//在函数体结束后，从延迟队列中取出指令并执行
	//一般会将defer定义在函数体开始，保证defer后面的指令可以加入延迟队列成功
	defer func() {
		//recover 可以正常捕获panic，程序也可以正常退出
		if r := recover(); r != nil {
			fmt.Printf("%v\n", r)
		}
	}()
	panic(errors.New("出错了"))
}

func main() {
	fmt.Println("main开始执行")
	//handlerError()
	catchError()
	fmt.Println("main结束执行")
}
